/**
 * 国内游通用埋点
 * Created By xzj08325@ly.com
 * 使用方法：
 * var track = require('../../../common/track');
 * $("...").on("click", function() {
 *     track('PC_index', 'slider', '^slider^1');
 * });
 * $("...").on("mouseenter", function() {
 *     track('PC_index', 'slider', '^slider^1', 'hover');
 * });
 * 更新日志:
 * 2016-03-18 创建 --贰陆
 * 2016-03-22 更新为严格模式 --贰陆
 */

(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        define([], factory);
    } else if (typeof module === 'object' && module.exports) {
        module.exports = factory();
    } else {
        root.track = factory();
    }
}(this, function () {
    "use strict";

    var check = setInterval(_trackObjReady, 300);

    function _trackObjReady() {
        if (window._tcTraObj && typeof window._tcTraObj._tcTrackEvent === 'function') {
            clearInterval(check);
            // 通用点击埋点，适用于没有阻止click事件冒泡的场景
            // 给需要埋点的元素添加data-track属性，属性值格式如下：
            // <div data-track='{
            //      "category" : "PC_index",
            //      "label"    : "slider",
            //      "value"    : "slider^1"
            // }'></div>
            // 属性值必须用单引号包裹
            $("body").on("click", "[data-track]", function (e) {
                var ele = $(this);
                var trackData = ele.data("track");

                _track(trackData.category, trackData.label, trackData.value);
            });
        }
    }

    /**
     * 非通用埋点方法，适用于埋点对象的click事件阻止冒泡或非click埋点
     * @param  {string} category   埋点类别，一般代表页面名称
     * @param  {string} label      埋点标识，一般代表埋点元素
     * @param  {string} value      埋点值
     * @param  {string} action     埋点类型，一般代表用户动作 默认是click
     * @param  {string} fromPage    埋点事件触发的页面
     * 最终发送埋点请求的TrackEvent参数举例： {"LoginKey":,"LoginCount":undefined,"SessionId":,"PageCount":undefined,
     * "Category":"search","Action":"/tourism/homepage","FromPage":"http://10.1.20.100:8081/guoneiyou/dest/?src=%E4%B8%8A%E6%B5%B7",
     * "Label":"/sbox/k","Value":"|*|k:苏州|*|locCId:226|*|cityId:226|*|rc:166|*|ab:|*|"}
     */
    function _track(category, label, value, action, fromPage) {
		try {
            if(fromPage){
                _tcTraObj._tcTrackEvent(category, action || 'click', label, value, fromPage);
            }else{
                _tcTraObj._tcTrackEvent(category, action || 'click', label, value);
            }
		} catch (err) {
		}
    }

    // 暴露公共方法
    return _track;
}));










